package com.zzl.bonds.ticket.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.zzl.bonds.ticket.dto.TickeoperateLogAddDto;
import com.zzl.bonds.ticket.dto.TickeoperateLogUpdateDto;
import com.zzl.bonds.ticket.dto.TicketOperateLogParams;
import com.zzl.bonds.ticket.dto.feign.NoticeApprovalResult;
import com.zzl.bonds.ticket.dto.feign.TicketOperateLogAddDto;
import com.zzl.bonds.ticket.entity.TicketFinanceEntity;
import com.zzl.bonds.ticket.entity.TicketOperateLogEntity;
import com.zzl.general.common.exception.SysException;
import com.zzl.general.common.serurity.entity.User;
import com.zzl.general.common.utils.PageUtils;

import java.util.List;
import java.util.Map;

/**
 * 票的操作记录表
 *
 * @author sunpp
 * @date 2022-02-16 11:14:07
 */
@SuppressWarnings("javadoc")
public interface TicketOperateLogService extends IService<TicketOperateLogEntity> {

    /**
     * 融单
     *
     * @param ticketFinanceEntity 开单实体
     * @param user       登录用户
     */
    void saveTicketLog(TicketFinanceEntity ticketFinanceEntity, User user) throws SysException;

    /**
     * 分页查询
     *
     * @param params 查询参数
     * @return 分页数据
     */
    PageUtils queryPage(Map<String, Object> params);

    /**
     * 新增
     *
     * @param tickeoperateLogAddDto 新增实体
     * @param user                  当前登录用户
     * @throws SysException 业务异常
     */
    void saveTicketOperateLog(TickeoperateLogAddDto tickeoperateLogAddDto, User user) throws SysException;

    /**
     * 修改
     *
     * @param tickeoperateLogUpdateDto 修改实体
     * @param user                     当前登录用户
     * @throws SysException 业务异常
     */
    void updateTickeoperateLogById(TickeoperateLogUpdateDto tickeoperateLogUpdateDto, User user) throws SysException;

    /**
     * @param type                 1，开立申请 2，转让申请，3，融资申请
     * @param applyId              对应的申请id
     * @param ticketPreviousStatus 上一个状态
     * @param operateType          操作类型
     * @param ticketStatus         凭证状态
     * @param user                 当前登陆状态
     * @param remark               操作备注
     * @param signEnterpriseId     签收企业id
     * @param signEnterpriseName   签收企业名称
     * @param enterpriseId         发起方企业id
     * @param enterpriseName       发起方企业名称
     * @param ticketId             票据id
     * @param isToApplication      是否属于开立转让融资申请详情页里的操作记录 0是 1否
     */
    void saveTicketLog(String type, String applyId, String ticketPreviousStatus, String operateType, String ticketStatus, User user,
                       String remark, String signEnterpriseId, String signEnterpriseName, String enterpriseId, String enterpriseName,
                       String ticketId, String isToApplication,String instinctyId,String instinctyName);

    /**
     * @param type                 1，开立申请 2，转让申请，3，融资申请
     * @param applyId              对应的申请id
     * @param ticketPreviousStatus 上一个状态
     * @param operateType          操作类型
     * @param ticketStatus         凭证状态
     * @param user                 当前登陆状态
     * @param remark               操作备注
     * @param signEnterpriseId     签收企业id
     * @param signEnterpriseName   签收企业名称
     * @param enterpriseId         发起方企业id
     * @param enterpriseName       发起方企业名称
     * @param ticketId             票据id
     * @param isToApplication      是否属于开立转让融资申请详情页里的操作记录 0是 1否
     */
    void saveTicketLog(String type, String applyId, String ticketPreviousStatus, String operateType, String ticketStatus, User user,
                       String remark, String signEnterpriseId, String signEnterpriseName, String enterpriseId, String enterpriseName,
                       String ticketId, String isToApplication,String instinctyId,String instinctyName,NoticeApprovalResult noticeApprovalResult);


    /**
     * @param type                 1，开立申请 2，转让申请，3，融资申请
     * @param applyId              对应的申请id
     * @param ticketPreviousStatus 上一个状态
     * @param operateType          操作类型
     * @param ticketStatus         凭证状态
     * @param user                 当前登陆状态
     * @param remark               操作备注
     * @param signEnterpriseId     签收企业id
     * @param signEnterpriseName   签收企业名称
     * @param enterpriseId         发起方企业id
     * @param enterpriseName       发起方企业名称
     * @param ticketId             票据id
     * @param isToApplication      是否属于开立转让融资申请详情页里的操作记录 0是 1否
     */
    TicketOperateLogEntity getTicketOperateLogEntity(String type, String applyId, String ticketPreviousStatus, String operateType, String ticketStatus, User user,
                                                     String remark, String signEnterpriseId, String signEnterpriseName, String enterpriseId, String enterpriseName,
                                                     String ticketId, String isToApplication,String instinctyId,String instinctyName);

    /**
     * @param type                 1，开立申请 2，转让申请，3，融资申请
     * @param applyId              对应的申请id
     * @param ticketPreviousStatus 上一个状态
     * @param operateType          操作类型
     * @param ticketStatus         凭证状态
     * @param user                 当前登陆状态
     * @param remark               操作备注
     * @param signEnterpriseId     签收企业id
     * @param signEnterpriseName   签收企业名称
     * @param enterpriseId         发起方企业id
     * @param enterpriseName       发起方企业名称
     * @param ticketId             票据id
     * @param isToApplication      是否属于开立转让融资申请详情页里的操作记录 0是 1否
     */
    TicketOperateLogEntity getTicketOperateLogEntity(String type, String applyId, String ticketPreviousStatus, String operateType, String ticketStatus, User user,
                                                     String remark, String signEnterpriseId, String signEnterpriseName, String enterpriseId, String enterpriseName,
                                                     String ticketId, String isToApplication,String instinctyId,String instinctyName,NoticeApprovalResult noticeApprovalResult);

    void saveFeignTicketLog(TicketOperateLogAddDto addDto, User user) throws SysException;

    List<TicketOperateLogEntity> listOperateLog(TicketOperateLogParams params, User user);
}

